//
//import org.quartz.*;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Component;
//import org.springframework.transaction.annotation.Transactional;
//import org.xqp.order.domain.OrderPet;
//import org.xqp.order.domain.OrderPetDetail;
//import org.xqp.order.mapper.OrderPetDetailMapper;
//import org.xqp.order.mapper.OrderPetMapper;
//import org.xqp.pet.domain.Pet;
//import org.xqp.pet.mapper.PetMapper;
//import org.xqp.quartz.util.QuartzUtil;
//
//import java.util.Date;
//import java.util.List;
//import java.util.Map;
//import java.util.stream.Collectors;
//
////工作类 ， 交给容器
////订单超时处理的工作
//@Component
//public class OrderExpireJob implements Job {
//
//    @Autowired
//    private PayBillMapper payBillMapper ;
//
//    @Autowired
//    private OrderPetDetailMapper orderPetDetailMapper ;
//
//    @Autowired
//    private OrderPetMapper orderPetMapper ;
//
//    @Autowired
//    private PetMapper petMapper;
//
//    @Autowired
//    private Scheduler scheduler;
//
//    /**
//     * 订单超时处理的工作
//     * 1.查询订单支付单
//     * 2.如果状态是待支付，修改状态为超时
//     * 3.查询业务单，修改为超时
//     * 4.查询宠物，退库存
//     * 5.调用支付宝关单接口
//     * 6.删除定时任务
//     */
//    @Override
//    @Transactional
//    public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
//        //获取数据
//        JobDataMap jobDataMap = jobExecutionContext.getJobDetail().getJobDataMap();
//        //数据
//        Map<String,String> dataMap = (Map<String, String>) jobDataMap.get("params");
//        String orderNo = dataMap.get("orderNo");
//
//        //*
//        // 问？如果用户进入了支付页面，还没输入支付密码，正好订单自动超时，这时候
//               //订单状态超时，用户又去输入了密码支付，怎么处理？
//
//        // 订单超时处理的工作
//        //* 1.查询订单支付单？
//        PayBill payBill = payBillMapper.selectByNo(orderNo);
//
//        String jobName = dataMap.get("jobName");
//        //* 2.如果状态不是待支付就不要处理，只是处理待支付
//        if(payBill.getState().intValue() != PayBill.SATET_WAIT_PAY){
//            QuartzUtil.removeJob(scheduler, jobName);
//            System.out.println("删除定时任务...");
//            return;
//        }
//        OrderPet orderPet = orderPetMapper.selectByOrderNo(orderNo);
//        if(orderPet.getState().intValue() != OrderPet.STATE_WAIT_PAY ){
//            QuartzUtil.removeJob(scheduler, jobName);
//            System.out.println("删除定时任务...");
//            return ;
//        }
//
//        //修改状态为超时
//        payBill.setState(PayBill.SATET_CANCEL);
//        Date date = new Date();
//        payBill.setUpdateTime(date);
//        payBillMapper.update(payBill);
//
//        //* 3.查询业务单，修改为超时
//        orderPet.setState(OrderPet.STATE_PAY_OUTTIME_CANCEL);
//        orderPet.setLastUpdateTime(date);
//        orderPetMapper.update(orderPet);
//
//        //* 4.查询宠物，退库存
//        List<OrderPetDetail> details = orderPetDetailMapper.selectByOrderNo(orderNo);
//        //宠物ID集合
//        List<Long> petIds = details.stream()
//                .map(detail -> detail.getPetId()).collect(Collectors.toList());
//
//        List<Pet> pets = petMapper.batchSelectByIds(petIds, Pet.STATE_ONLINE);
//        pets.forEach(pet -> {
//            //这里的1按道理应该是加：OrderPetDetail中的数量
//            pet.setStore_number(pet.getStore_number()+1);
//            petMapper.update(pet);
//        });
//
//        //* 5.调用支付宝关单接口
//        try {
//            AlipayTradeCloseResponse response = Factory.Payment.Common().close(orderNo);
//            System.out.println("支付宝关单："+response);
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
//
//        //* 6.删除定时任务
//        QuartzUtil.removeJob(scheduler, jobName);
//        System.out.println("删除定时任务...");
//    }
//}
